上一章介紹了如何用 Opencv 進行讀取、儲存圖片,以及將圖片從彩色轉成灰階的兩種方法,本章會講怎麼對圖片進行切割。
除了一定要有的cv2之外,這次還會用到負責陣列處理的Numpy函式庫,在開頭匯入函式庫時一併寫下:
import cv2
###這裡多加一行importimport numpy as np
img = cv2.imread('image.jpg')
當我們執行 cv2.imread 函數引入外部圖片存進自訂變數時,圖片被視為一個由像素點組成、行列等同於圖片高度和寬度的二維陣列,而我們針對圖片進行的處理其實是對二維陣列進行操作。
使用type函數印出變數型態:
type(img)
<class 'numpy.ndarray'>
可以看到圖片被定義成一個Numpy的二維陣列。
在變數後面加上 shape 函數,可以顯示出圖片的詳細資料:
img.shape
(1080, 1920, 3)
這三個數字分別代表圖片的長度、寬度和色調,第三個參數是3代表讀取到的是一張彩色圖片,若數值為1則是灰階圖片。
在Python中想要切割圖片其實非常簡單,我們知道引入的圖片被轉成一個二維陣列,那麼只需要把想從原始圖片擷取出來的畫面用矩陣劃分的方式定義出來,並且存到一個新的變數,就等同於對圖片進行切割。
ltop = (100, 100)
rtbm = (200, 200)
img_cap = img[ltop[1]:rtbm[1], ltop[0]: rtbm[0]]
可以用 cv2.imshow 函數測試一下,擷取畫面是否正常:
cv2.imshow('Image', img_cap)
測試成功之後,可以按照上一章所講的儲存方式把擷取圖片存下來:
cv2.imwrite('output.jpg', img_cap)
別忘了在最後加上:
cv2.waitKey(0)
cv2.destroyAllWindows()
以上,就是運用座標擷取圖片的方法,下一章會介紹該如何用函數使圖片進行翻轉和方向調換。